/**
 * @author Aaron
 * @createTime 10:33 2022/6/1
 **/
package api

import (
	"github.com/labstack/echo/v4"
	"github.com/spf13/cast"
	"longmen/server/pkg/common/api_models"
	"longmen/server/pkg/common/helper/const"
	"longmen/server/pkg/common/helper/util"
)

// @Summary 通过ID获取贵族信息
// @Description 通过ID获取贵族信息
// @Accept  json
// @Produce  json
// @Tags Noble
// @Param   sendBody body api_models.GetNobleByIdReq true "body"
// @Success 200 {object} api_models.GetNobleByIdResp "result"
// @Router /api/noble/getNobleById [POST]
func (base *Controller) GetNobleById(c echo.Context) error {
	req := &api_models.GetNobleByIdReq{}
	if err := util.Json2Struct(c.Get("body").(string), req); err != nil {
		return util.BadParam(c, err)
	}
	resp, err := base.Service.GetNobleById(req.Id)
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 获取贵族列表
// @Description 获取贵族列表
// @Accept  json
// @Produce  json
// @Tags Noble
// @Success 200 {object} api_models.GetNobleListResp "result"
// @Router /api/noble/getNobleList [POST]
func (base *Controller) GetNobleList(c echo.Context) error {
	resp, err := base.Service.GetNobleNameList()
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 开通贵族
// @Description 开通贵族
// @Accept  json
// @Produce  json
// @Tags Noble
// @Param   sendBody body api_models.ChargeNobleReq true "body"
// @Success 200 {object} api_models.Response "result"
// @Router /api/noble/chargeNoble [POST]
func (base *Controller) ChargeNoble(c echo.Context) error {
	req := &api_models.ChargeNobleReq{}
	if err := util.Json2Struct(c.Get("body").(string), req); err != nil {
		return util.BadParam(c, err)
	}
	if err := _const.Validate.Struct(req); err != nil {
		return util.BadParam(c, err)
	}
	err := base.Service.SubNoble(c.Get("uid").(int), req.Id, int(req.AnchorId))
	if err != nil {
		return util.BuildFail(c, 1, err.Error(), err)
	}
	return util.BuildSuccess(c, nil, "")
}

// @Summary 注册领取贵族
// @Description 注册领取贵族
// @Accept  json
// @Produce  json
// @Tags Noble
// @Success 200 {object} api_models.ReceiveNobleResp "result"
// @Router /api/noble/receiveNoble [POST]
func (base *Controller) ReceiveNoble(c echo.Context) error {
	user, err := base.GetUserByCtx(c)
	if err != nil {
		return util.BuildLoginTimeOut(c, err)
	}
	if user.ReceiveVip == 1 {
		return util.BuildFail(c, 1, "您已领取过VIP", nil)
	}

	resp, err := base.Service.ReceiveNoble(user)
	if err != nil {
		return util.BuildFail(c, 1, err.Error(), err)
	}
	return util.BuildSuccess(c, resp, "")
}

// @Summary 贵族价格表 需登入
// @Description 贵族价格表 需登入
// @Accept  json
// @Produce  json
// @Tags Noble
// @Success 200 {object} api_models.GetNoblePriceList "result"
// @Router /api/noble/getNoblePriceList [POST]
// func (base *Controller) GetNoblePriceList(c echo.Context) error {
// 	list, err := base.Service.GetNoblePriceList(uint(cast.ToInt(c.Get("uid"))))
// 	if err != nil {
// 		return common.BuildFail(c, 1, "", err)
// 	}
// 	return common.BuildSuccess(c, list, "")
// }

// @Summary 我的贵族
// @Description 我的贵族
// @Accept  json
// @Produce  json
// @Tags Noble
// @Param   sendBody body api_models.GetNobleByIdReq true "body"
// @Success 200 {object} api_models.GetNobleByIdResp "result"
// @Router /api/noble/getMyNoble [POST]
func (base *Controller) GetMyNoble(c echo.Context) error {

	resp, err := base.Service.GetMyNoble(cast.ToInt(c.Get("uid")))
	if err != nil {
		return util.BuildFail(c, 1, "", err)
	}
	return util.BuildSuccess(c, resp, "")
}
